iT邦幫忙

0

Laravel 技術筆記 (三)【Migrations 遷移】

  • 分享至 

  • xImage
  •  

介紹

遷移就像是資料庫的版本控制器,並且讓你可以輕鬆地去定義資料庫的結構,包含新增資料表、修改欄位、創建索引...等等都可以透過程式碼來定義,並且當進行團隊協作時,你可以透過遷移很快的分享你對資料庫的改動或結構給你的夥伴。


新增遷移

遷移是一系列的檔案,放在 database/migrations 目錄下,你可以使用 artisan 提供的指令來新增遷移,新增時你可以選填兩個參數,--create={table_name} 會在新增遷移檔案時預先撰寫好新增「table_name」資料表的程式碼,而 --table={table_name} 則會預先撰寫好已經存在的「table_name」資料表的程式碼:

$ php artisan make:migration create_books_table --create=books
/* 新增資料表 */
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('books');
    }
};
$ php artisan make:migration create_books_table --table=books
/* 已經存在的資料表 */
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('books', function (Blueprint $table) {
            //
        });
    }

    public function down()
    {
        Schema::table('books', function (Blueprint $table) {
            //
        });
    }
};


定義遷移

當我們新增一個 Laravel 專案時,會發現在目錄下已經有幾個遷移檔案存在,我們先看看 2014_10_12_000000_create_users_table.php 這個檔案的內容:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
};

檔案中有兩個已經定義好的方法 up 和 down,這兩個方法都是告訴應用程式具體要對資料庫做甚麼樣的修改,差別在於 up 是去「執行」修改,down 是「撤銷」修改,上圖中 up 方法裡的 Schema::create() 意思是新增一張名為 users 的資料表,並且透過 $table-> 語法給予資料表欄位與指定資料的型態,至於 down 方法裡的 dropIfExists() 則是檢查資料庫是否有 users 這個資料表,如果存在就把資料表刪除。
※關於如何透過遷移操作欄位(新增欄位、修改欄位、創建索引、添加外鍵...等等),由於語法眾多,詳情請見 Laravel 官方網站


執行遷移

定義好遷移後執行以下 artisan 指令(.env 檔案內關於資料庫的設定務必先設定完畢否則會報錯),Laravel 便會按照檔案名稱的時間先後檢查所有遷移檔案是否被執行,並將那些還沒執行過的全部執行:

$ php artisan migrate

另外指令也支援許多額外選項供操作:

/* 恢復到執行全部遷移之前的初使狀態 */
$ php artisan migrate:reset
/* 恢復到執行全部遷移檔案之前的初使狀態,再執行每一個遷移 */
$ php artisan migrate:refresh
/* 刪除所有資料表(不執行 down 而是直接刪除資料表),再執行每一個遷移 */
$ php artisan migrate:fresh
/* 只恢復到你上一次執行遷移的狀態,可添加參數 --step={n},指定恢復的數量 */
$ php artisan migrate:rollback --step=1
/* 顯示一個列出所有遷移的表格,旁邊會顯示 Yes 或 No 表示是否已經執行過,顯示的數字則代表是第幾次執行指令時執行這個遷移檔案 */
$ php artisan migrate:status

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言